package com.frejoys.service;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.frejoys.common.dto.admin.GoodsAddDto;
import com.frejoys.common.dto.admin.GoodsUpDto;
import com.frejoys.common.dto.admin.StoreIdAndNameDto;
import com.frejoys.common.dto.admin.UpShelvesDto;
import com.frejoys.common.dto.app.GoodsFiltrationListDto;
import com.frejoys.common.dto.app.GoodsListDto;
import com.frejoys.common.dto.app.GoodsNameDto;
import com.frejoys.common.dto.app.StoreIdDto;
import com.frejoys.common.dto.common.IdDto;
import com.frejoys.common.dto.common.IdPageDto;
import com.frejoys.common.dto.common.PageDto;
import com.frejoys.common.dto.goods.GoodsPageDto;
import com.frejoys.common.dto.goods.GoodsSaveDto;
import com.frejoys.common.dto.store.StoreIdAndPageDto;
import com.frejoys.common.po.GoodsRepCountPo;
import com.frejoys.common.vo.admin.GoodsListVo;
import com.frejoys.common.vo.app.GoodsSimpleVo;
import com.frejoys.common.vo.app.GoodsVo;
import com.frejoys.common.vo.app.StoreGoodsVo;
import com.frejoys.dao.entity.Goods;

import java.util.List;

public interface GoodsService extends IService<Goods> {

    default Goods getOnly(QueryWrapper<Goods> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    default Goods getOnly(LambdaQueryWrapper<Goods> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    /**
     * 获取信息
     * @param id
     * @return
     */
    Goods getInfo(Integer id);

    // 后台获取列表
    IPage<GoodsListVo> listInfo(StoreIdAndNameDto dto);

//    //后台审核商品上架
//    boolean goodsOnSale(IdDto dto);

    //首页商品列表商品列表 排序
    List<GoodsVo> goodsFiltrationList(GoodsFiltrationListDto dto);

    //商品详情
    GoodsVo GoodsDetails(Integer id);

    boolean addInfo(GoodsAddDto dto);

    boolean upInfo(GoodsUpDto dto);

    boolean delInfo(Integer id);

    //根据品类细类筛选商品列表 排序
    List<GoodsVo> sonGoodsFiltrationList(GoodsFiltrationListDto dto);


    /**
     * 用户查询店铺商品
     * @param dto
     * @return
     */
    List<GoodsVo> userGoodsList(StoreIdDto dto);

    //店铺下的商品
    List<StoreGoodsVo> storeGoodsList(StoreIdAndPageDto dto);

    //商家的所有商品
    List<StoreGoodsVo> goodsList(PageDto dto, Long userId);

    // 获取店铺下商品价格库存信息，用于下单支付
    List<Goods> getGoodsPriceRepCountInfo(Integer storeId, List<Integer> goodsId);

    // 增加或减少指定商品id的商品库存
    Integer disposeGoodsRepCount(List<GoodsRepCountPo> countPos);



    List<Goods> getListByStoreId(IdPageDto dto);
    /**
     * 后台获取商品列表
     */
    Page<Goods> pageGoods(GoodsPageDto pageDto);

    /**
     * 商家端-新增店铺商品
     */
    boolean saveGoods(GoodsSaveDto goodsSaveDto);

    /**
     * 商家端-申请商品上架
     */
    boolean goodsUp(IdDto dto);

    /**
     * 商家端-申请商品下架
     */
    boolean goodsDown(IdDto dto);

    //搜索商品
    List<GoodsVo> selectGoodsList(GoodsNameDto dto);

    //店铺下的商品 右边商品
    List<GoodsSimpleVo> storeGoodsAndCategoryList(StoreIdDto dto);


    // 获取上架中商品id列表
    List<Integer> getGoodsIdList(Integer page, Integer size);

    //管理员编辑商品上下架状态
    boolean upGoodsShelves(UpShelvesDto dto);
}
